package com.atguigu.tingshu.user.service;

import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.atguigu.tingshu.vo.user.UserPaidRecordVo;
import com.atguigu.tingshu.vo.user.UserUpdateVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface UserInfoService extends IService<UserInfo> {

    /**
     * 微信小程序登录
     *
     * @param code 微信授权码
     * @return 返回包含用户信息和token的Map
     */
    Map<String, Object> wxLogin(String code);

    /**
     * 获取用户信息（带缓存）
     *
     * @param id 用户id
     * @return 用户信息VO
     */
    UserInfoVo getUserInfo(Long id);

    /**
     * 更新用户信息
     * 先更新数据库，再删除缓存，保证数据库缓存的一致性
     *
     * @param userUpdateVo 用户信息更新VO（已包含ID）
     * @return 是否更新成功
     */
    boolean updateUser(UserUpdateVo userUpdateVo);

    /**
     * 获取用户声音列表付费情况
     *
     * @param userId                    用户ID
     * @param albumId                   专辑ID
     * @param needCheckBuyStateTrackIds 需要检查购买状态的声音ID列表
     * @return 声音ID与付费状态的映射，1表示已购买，0表示未购买
     */
    Map<Long, Integer> getUserTrackPaidState(Long userId, Long albumId, List<Long> needCheckBuyStateTrackIds);

    /**
     * 判断用户是否购买过专辑
     *
     * @param albumId 专辑ID
     * @return true-已购买，false-未购买
     */
    Boolean isPaidAlbum(Long albumId);

    /**
     * 判断用户是否购买过声音列表
     *
     * @param trackIdList 声音ID列表
     * @return true-至少购买过一个声音，false-没有购买过任何声音
     */
    Boolean isPaidTrack(List<Long> trackIdList);

    /**
     * 保存用户购买记录
     *
     * @param userPaidRecordVo 用户购买记录VO
     */
    void savePaidRecord(UserPaidRecordVo userPaidRecordVo);

}
